# @Time    :2025/4/12 15:37
class Array:
    def __init__(self):
        self.__size = 0  # 元素个数
        self.__items = [0] * 8  # 底层元素
        self.__capacity = 8  # 总容量

    def __str__(self):

        res = "["
        for i in range(self.__size):
            res += str(self.__items[i])
            if i != self.__size - 1:
                res += ","
        res += "]"
        return res

    def size(self):
        """返回数组中元素个数"""
        return self.__size

    def is_empty(self):
        """判断数组是否为空"""
        return self.__size == 0

    def __grow(self):
        """对数组容量进行扩容"""

        self.__capacity *= 2
        new_capacity = [0] * self.__capacity  # 新数组
        for i in range(self.__size):
            new_capacity[i] = self.__items[i]  # 原有数组的元素搬到 新数组里
        self.__items = new_capacity  # 存储元素的地址 指向 新数组的地址

    def inster(self, index, item):
        # 1,先判断下标是否越界
        if index < 0 or index > self.__size:
            raise IndexError("下标越界")
        # 2，判断数据是否够用， #如果元素的个数等于 容量的大小 ，就 调用扩容方法
        if self.__size == self.__capacity:
            self.__grow()

            # 3，插入从右向左遍历，（数据是从右边最后一个向后一位 给右边的位置）
        for i in range(self.__size, index, -1):
            self.__items[i] = self.__items[i - 1]  # 左边给右边

        self.__items[index] = item  # 要插入的元素item 放在元素索引为index的位置
        self.__size += 1  # 元素的个数加1

    def append(self, item):
        """在末尾插入元素"""
        self.inster(self.__size,item)

    def remove(self, index):
        """删除指定位置的元素"""
        # 1,先判断是否越界
        if index < 0 or self.__size <= index:
            raise IndexError("下标越界")
        # 2，遍历要删除的位置的右边的元素,从要删的位置开始到元素的倒数第一个
        for i in range(index, self.__size - 1):
            self.__items[i] = self.__items[i + 1]
        self.__size -= 1

    def set(self, index, item):
        """修改指定位置的元素"""
        # 1,先判断是否越界
        if index < 0 or self.__size <= index:
            raise IndexError("下标越界")
        # 2,赋值
        self.__items[index] = item

    def get(self, index):
        """获取指定位置的元素"""
        # 1,先判断是否越界
        if index < 0 or self.__size <= index:
            raise IndexError("下标越界")
        # 2，获取数据
        return self.__items[index]

    def find(self, item):
        """查找数组中某个元素的位置"""
        for i in range(0, self.__size):
            if item == self.__items[i]:
                return i
        return -1

    def for_each(self, func):
        """遍历数组"""
        for i in range(0, self.__size):
            func(self.__items[i])

a1 = Array()
a1.inster(0,1)
a1.inster(1,2)
a1.inster(2,3)
a1.inster(3,4)
a1.append(0)
a1.append(10)
print(a1)
a1.remove(1)
print(a1)
a1.for_each(print)
print(a1)
# print(a1.is_empty())
# print(a1.size())
# print(a1.get(1))
# print(a1)
